package com.finalshell;

import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtConstructor;
import javassist.CtMethod;

import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.IllegalClassFormatException;
import java.security.ProtectionDomain;

public class Transformer_fm implements ClassFileTransformer {

    @Override
    public byte[] transform(ClassLoader loader, String className,
                            Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer)
            throws IllegalClassFormatException {
        if (className.equals("fm")) { // 需要修改的类的全限定名
            try {
                // 获取 ClassPool 实例
                ClassPool classPool = ClassPool.getDefault();
                // 获取指定类的 CtClass 对象
                CtClass ctClass = classPool.get(className.replace("/", "."));

                // 需要修改的方法名
//                CtMethod ctMethod = ctClass.getDeclaredMethod("a");
                // 获取要修改的静态块
                CtConstructor ctConstructor = ctClass.getClassInitializer();
                if(ctConstructor != null){
                    ctConstructor.insertAfter("System.out.println(\"Variable value: \" + a);");
                    // 重写方法体
//                    ctMethod.setBody("");
                    // 返回修改后的字节码数组
                    return ctClass.toBytecode();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return null;
    }
}